home *** CD-ROM | disk | FTP | other *** search
/ Super PC 34 / Super PC 34 (Shareware).iso / spc / UTIL / DJGPP2 / V2 / DJLSR200.ZIP / src / libc / posix / unistd / read.c < prev    next >
Encoding:
C/C++ Source or Header  |  1995-07-09  |  876 b   |  39 lines

  1. /* Copyright (C) 1995 DJ Delorie, see COPYING.DJ for details */
  2. #include <libc/stubs.h>
  3. #include <stdlib.h>
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6. #include <io.h>
  7.  
  8. #include <libc/dosio.h>
  9.  
  10. ssize_t
  11. read(int handle, void* buffer, size_t count)
  12. {
  13.   ssize_t ngot;
  14.   ngot = _read(handle, buffer, count);
  15.   if(ngot <= 0)
  16.     return ngot;
  17.   if (__file_handle_modes[handle] & O_TEXT)
  18.   {
  19.     /* check for Ctrl-Z EOF character */
  20.     int i;
  21.     for (i=0; i<ngot; i++)
  22.       if (((char *)buffer)[i] == 0x1a) /* Ctrl-Z */
  23.       {
  24.     lseek(handle, i-ngot, SEEK_CUR); /* back up to make ^Z first char read next time */
  25.     ngot = i;
  26.     break;
  27.       }
  28.  
  29.     if (ngot > 0)
  30.     {
  31.       /* convert CR/LF to NL */
  32.       ngot = crlf2nl(buffer, ngot);
  33.       if(!ngot)
  34.     return read(handle, buffer, count);        /* if all CR's read more data */
  35.     }
  36.   }
  37.   return ngot;
  38. }
  39.